home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 24 / AACD 24.iso / AACD / System / Safe / SMEGClones / SMEG.asm < prev    next >
Assembly Source File  |  2001-07-14  |  11KB  |  702 lines

  1. ;
  2. ; Name        :    SMEG
  3. ; Description    :    XFD external slave to detect and remove SMEG viri
  4. ; Author    :    Zbigniew `Zeeball` Trzcionkowski
  5. ; Date        :    12.07.2001
  6. ; Version    :    1
  7. ; Supports    :    PENETRATOR (SMEG clone)
  8. ;                       SMEG2 (1556 bytes)
  9. ;                       SMEG2 (1604 bytes)
  10. ;
  11. ; In future    :    (more clones?)
  12. ; Disclaimer    :    The slave and this source are Public Domain.
  13. ; Comments:
  14. ;
  15. ; I HAVE TESTED IT ON MY VERY OWN SYSTEM, BUT:
  16. ;
  17. ; I TAKE NO RESPONSIBILITY FOR ANY DATALOSS CAUSED BY THIS TOOL.
  18. ;
  19. ; MOTTO: If Santa Zeeball didn't do something it won't be done.
  20. ;
  21. ; USAGE: Use xfdDecrunch to clean whole directories.
  22. ;        I take no responisbility for this software,
  23. ;        and decrunched files that had to stay untouched :-)
  24. ;        This is xfdDecrunch not VirusZ!
  25. ;
  26. ;
  27. ;To Jan Erik: Look at the routines and find the missing decoder ;-)
  28. ;             Anyway, some day I will tell You how to break
  29. ;             the second coding of Penetrator...
  30. ;
  31. ;To PENETRATOR:
  32. ;             SMEG was the best fast infector for Amiga,
  33. ;             but You don't seem to be even poor coder.
  34. ;             Aha! Szkoda, ze napisales teksty po polsku.
  35. ;             Miales szanse osmieszyc sie przed calym swiatem!
  36. ;
  37. ;To Error:    Thanks for making my CD work, so I could start
  38. ;             and analyze all that shit.
  39. ;
  40. ;To Jan Andersen:
  41. ;             Saboteur above HELPED me again... :-)
  42.  
  43.  
  44.  
  45.  
  46.  
  47.     section    ZbL!,code
  48. ZbL:
  49.     moveq    #-1,d0        ;security
  50.     rts            ;ender
  51.     
  52.     dc.b    "XFDF"        ;XFDF_ID
  53.     dc.w    1,0
  54.     dc.l    0,0,Penetrator
  55.  
  56.     dc.b    "$VER: SMEG-CLONE 1 (12.07.01) by Zbigniew `Zeeball` Trzcionkowski",10,0
  57.  
  58.  
  59. Smeg1Name:    dc.b    "[PENETRATOR! virus]",0
  60. Smeg2Name:    dc.b    "[SMEG2 virus]",0
  61. Smeg3Name:    dc.b    "[SMEG2 virus]",0
  62.     even
  63.  
  64. Penetrator:
  65.         dc.l    SMG2        ;next slave
  66.         dc.w    1        ;version
  67.         dc.w    38        ;master version
  68.         dc.l    Smeg1Name    ;name
  69.         dc.w    0        ;XFDPFF_RELOC
  70.         dc.w    0
  71.         dc.l    RecogPEN    ;recog buffer
  72.         dc.l    RemPEN        ;decrunch buffer
  73.         dc.l    0        ;recog segment
  74.         dc.l    0        ;decrunch segment
  75.         dc.w    0,0        ;slave/replace id
  76.         dc.l    80        ;min. file length for header and data
  77.  
  78. SMG2:        dc.l    SMG        ;next slave
  79.         dc.w    1        ;version
  80.         dc.w    38        ;master version
  81.         dc.l    Smeg2Name    ;name
  82.         dc.w    0        ;XFDPFF_RELOC
  83.         dc.w    0
  84.         dc.l    RecogSMG2    ;recog buffer
  85.         dc.l    RemSMG2        ;decrunch buffer
  86.         dc.l    0        ;recog segment
  87.         dc.l    0        ;decrunch segment
  88.         dc.w    0,0        ;slave/replace id
  89.         dc.l    80        ;min. file length for header and data
  90.  
  91. SMG:        dc.l    0        ;next slave
  92.         dc.w    1        ;version
  93.         dc.w    38        ;master version
  94.         dc.l    Smeg3Name    ;name
  95.         dc.w    0        ;XFDPFF_RELOC
  96.         dc.w    0
  97.         dc.l    RecogSMG    ;recog buffer
  98.         dc.l    RemSMG        ;decrunch buffer
  99.         dc.l    0        ;recog segment
  100.         dc.l    0        ;decrunch segment
  101.         dc.w    0,0        ;slave/replace id
  102.         dc.l    80        ;min. file length for header and data
  103.  
  104.  
  105.  
  106. PEN_size    =    6796
  107.  
  108. RecogPEN:
  109.     movem.l    d2-d7/a0-a6,-(sp)
  110.     bsr.b    .dupa
  111.     movem.l    (sp)+,d2-d7/a0-a6
  112.     rts
  113.     
  114. .Dupa:
  115.     cmp.l    #$3f3,(a0)
  116.     bne    .no
  117.  
  118.     move.w    #600,d0
  119.  
  120. .lup:
  121.     addq.l    #4,a0
  122.     
  123.     dbra    d0,.ski            ; BUG!
  124.     bra.w    .no
  125. .ski
  126.  
  127.     cmp.l    #$000003ea,(a0)        ; look for DataHunk
  128.     beq.b    .okiej
  129.  
  130.     cmp.l    #$000003e9,(a0)        ; look for CodeHunk
  131.     beq.b    .okiej
  132.  
  133.     cmp.l    #$c00003e9,(a0)        ; look for Link-95 Hunk
  134.     bne.b    .lup
  135.  
  136. .okiej
  137.     addq.l    #4,a0
  138.     
  139.     move.l    (a0)+,d0        ;HUNKCODE len in longs
  140.  
  141.     add.l    d0,a0
  142.     add.l    d0,a0
  143.     add.l    d0,a0
  144.     add.l    d0,a0
  145.  
  146.     sub.l    #PEN_size,a0
  147.  
  148.     cmp.l    #$4eaefd84,40(a0)
  149.     bne.b    .no
  150.     cmp.l    #$4eaeff88,44(a0)
  151.     bne.b    .no
  152.     cmp.w    #$610c,48(a0)
  153.     bne.b    .no
  154.     cmp.l    #$4eaeff82,50(a0)
  155.     bne.b    .no
  156.     cmp.l    #$4cdf7fff,54(a0)
  157.     bne.b    .no
  158.  
  159. .Yes:
  160.     moveq    #1,d0
  161.     rts
  162. .no:
  163.     moveq    #0,d0
  164.     rts
  165.  
  166.  
  167.  
  168.  
  169. SMG_size2    =    1604
  170.  
  171. RecogSMG2:
  172.     movem.l    d2-d7/a0-a6,-(sp)
  173.     bsr.b    .dupa
  174.     movem.l    (sp)+,d2-d7/a0-a6
  175.     rts
  176.     
  177. .Dupa:
  178.     cmp.l    #$3f3,(a0)
  179.     bne    .no
  180.  
  181.     move.w    #600,d0
  182.  
  183. .lup:
  184.     addq.l    #4,a0
  185.     
  186.     dbra    d0,.ski            ; BUG!
  187.     bra.w    .no
  188. .ski
  189.  
  190.     cmp.l    #$000003ea,(a0)        ; look for DataHunk
  191.     beq.b    .okiej
  192.  
  193.     cmp.l    #$000003e9,(a0)        ; look for CodeHunk
  194.     beq.b    .okiej
  195.  
  196.     cmp.l    #$c00003e9,(a0)        ; look for Link-95 Hunk
  197.     bne.b    .lup
  198.  
  199. .okiej
  200.     addq.l    #4,a0
  201.  
  202.     move.l    (a0)+,d0        ;HUNKCODE len in longs
  203.  
  204.     add.l    d0,a0
  205.     add.l    d0,a0
  206.     add.l    d0,a0
  207.     add.l    d0,a0
  208.  
  209.     sub.l    #SMG_size2,a0
  210.  
  211.     cmp.l    #$4cdf7ffe,108(a0)
  212.     bne.b    .no
  213.     cmp.l    #$4a804e75,112(a0)
  214.     bne.b    .no
  215.     cmp.l    #$534d4700,116(a0)
  216.     bne.b    .no
  217.  
  218. .Yes:
  219.     moveq    #1,d0
  220.     rts
  221. .no:
  222.     moveq    #0,d0
  223.     rts
  224.  
  225.  
  226. SMG_size    =    1556
  227.  
  228. RecogSMG:
  229.     movem.l    d2-d7/a0-a6,-(sp)
  230.     bsr.b    .dupa
  231.     movem.l    (sp)+,d2-d7/a0-a6
  232.     rts
  233.  
  234. .Dupa:
  235.     cmp.l    #$3f3,(a0)
  236.     bne    .no
  237.  
  238.  
  239.     move.w    #600,d0
  240.  
  241. .lup:
  242.     addq.l    #4,a0
  243.     
  244.     dbra    d0,.ski            ; BUG!
  245.     bra.w    .no
  246. .ski
  247.  
  248.     cmp.l    #$000003ea,(a0)        ; look for DataHunk
  249.     beq.b    .okiej
  250.  
  251.     cmp.l    #$000003e9,(a0)        ; look for CodeHunk
  252.     beq.b    .okiej
  253.  
  254.     cmp.l    #$c00003e9,(a0)        ; look for Link-95 Hunk
  255.     bne.b    .lup
  256.  
  257. .okiej
  258.     addq.l    #4,a0
  259.  
  260.     
  261.     move.l    (a0)+,d0        ;HUNKCODE len in longs
  262.  
  263.     add.l    d0,a0
  264.     add.l    d0,a0
  265.     add.l    d0,a0
  266.     add.l    d0,a0
  267.  
  268.     sub.l    #SMG_size,a0
  269.  
  270.     cmp.l    #$4eaefd54,84(a0)
  271.     bne.b    .no
  272.     
  273.     cmp.l    #$4cdf7ffe,88(a0)
  274.     bne.b    .no
  275.     
  276.     cmp.l    #$4a804e75,92(a0)
  277.     bne.b    .no
  278.  
  279.     cmp.l    #$611067e4,96(a0)
  280.     bne.b    .no
  281.  
  282. .Yes:
  283.     moveq    #1,d0
  284.     rts
  285. .no:
  286.     moveq    #0,d0
  287.     rts
  288.  
  289.  
  290.  
  291. ;--------------------------------------------------------------------
  292. ;--------------------------------------------------------------------
  293. RemPEN:
  294.     movem.l    d2-d7/a0-a6,-(sp)
  295.  
  296.     moveq    #0,d0
  297.  
  298.     move.l    4(a0),d7        ; xfdbi_SourceBufLen
  299.  
  300.  
  301.     movem.l    d0-a6,-(sp)
  302.     move.l    a0,a6
  303.     move.l    0(a0),a0        ; xfdbi_SourceBuffer
  304.  
  305. .Dupa:
  306.     move.l    d7,d0
  307.  
  308.  
  309. .lup:    dbra    d0,.ski            ; BUG!
  310.     movem.l    (sp)+,d0-a6
  311.     bra.w    .cant
  312. .ski
  313.     cmp.l    #$000003e9,(a0)+    ; look for CodeHunk
  314.     bne.b    .lup
  315.  
  316.     move.l    a0,a5            ; begin of codehunk
  317.  
  318.     ;****** CORRECT HUNKLENGTHs...
  319.  
  320.     move.l    0(a6),a0        ; xfdbi_SourceBuffer
  321.     lea.l    $14(a0),a0
  322.     sub.l    #PEN_size/4,(a0)
  323.     sub.l    #PEN_size/4,(a5)
  324.  
  325.     ;****** REPLACE STOLEN INSTRUCTION...
  326.  
  327.     move.l    #$61000002,d1
  328.  
  329.     move.l    a5,a0
  330.     add.l    (a5),a0
  331.     add.l    (a5),a0
  332.     add.l    (a5),a0
  333.     add.l    (a5),a0
  334.  
  335.     move.l    #$4eae0000,d4
  336.     move.w    64(a0),d4    
  337.  
  338.     move.l    a5,a2            ; BeginOfCodeHunk
  339.  
  340. .restore
  341.     move.l    (a0),d2
  342.     cmp.l    d1,d2
  343.     bne    .none
  344.     
  345.     move.l    d4,(a0)            ; restore JSR XXX(a6)
  346.  
  347. .none
  348.     addq.l    #2,d1
  349.     subq.l    #2,a0
  350.     cmpa.l    a0,a2
  351.     bne    .restore
  352.  
  353.     ;****** MAKE CLEAN COPY...
  354.  
  355.  
  356.     move.l    4(a6),a2        ; xfdbi_SourceBufLen
  357.     sub.l    #PEN_size,a2
  358.     add.l    0(a6),a2        ; xfdbi_SourceBuffer
  359.  
  360.     move.l    a5,a0            ; before
  361.     move.l    (a5),d0
  362.     lsl.l    #2,d0
  363.     add.l    d0,a0
  364.     lea.l    PEN_size(a0),a1    ; after
  365.     addq.l    #4,a1
  366.     addq.l    #4,a0
  367.  
  368. .copy:
  369.     move.l    (a1)+,(a0)+
  370.     cmp.l    a0,a2
  371.     bge.b    .copy
  372.  
  373.     movem.l    (sp)+,d0-a6
  374.  
  375.  
  376.     move.l    4(a0),d0    ; xfdbi_SourceBufLen
  377.     sub.l    #PEN_size,d0
  378.     move.l    d0,32(a0)    ; xfdbi_TargetBufSaveLen
  379.  
  380.     move.l    60(a0),a1    ; xfdbi_UserTargetBuf
  381.  
  382.     btst.b    #3,49(a0)    ; XFDFB_USERTARGET,1+xfdbi_Flags
  383.     bne.b    .CopyMem
  384.  
  385.     move.w    #1,18(a0)    ; XFDERR_NOMEMORY,xfdbi_Error
  386.  
  387.     move.l    d0,28(a0)    ; xfdbi_TargetBufLen
  388.  
  389.     move.l    4.w,a6        ; execbase
  390.     
  391.     move.l    24(a0),d1    ; xfdbi_TargetBufMemType
  392.     
  393.     move.l    a0,-(sp)
  394.     jsr    -198(a6)    ; AllocMem
  395.     move.l    (sp)+,a0
  396.  
  397.     move.l    d0,a1
  398.     move.l    d0,20(a0)    ; xfdbi_TargetBuffer
  399.     beq.b    .Cant
  400.  
  401.  
  402. .CopyMem:
  403.     clr.w    18(a0)        ; xfdbi_Error
  404.     
  405.     move.l    32(a0),d0    ; xfdbi_TargetBufSaveLen
  406.     move.l    0(a0),a0    ; xfdbi_SourceBuffer
  407.     jsr    -624(a6)    ; CopyMem
  408.  
  409.  
  410.     moveq    #1,d0
  411.     movem.l    (sp)+,d2-d7/a0-a6
  412.     rts
  413.  
  414.  
  415. .cant:
  416.     movem.l    (sp)+,d2-d7/a0-a6
  417.     rts
  418.  
  419.  
  420.  
  421. ;--------------------------------------------------------------------
  422. ;--------------------------------------------------------------------
  423.  
  424.  
  425. RemSMG2:
  426.     movem.l    d2-d7/a0-a6,-(sp)
  427.  
  428.     moveq    #0,d0
  429.  
  430.     move.l    4(a0),d7        ; xfdbi_SourceBufLen
  431.  
  432.  
  433.     movem.l    d0-a6,-(sp)
  434.     move.l    a0,a6
  435.     move.l    0(a0),a0        ; xfdbi_SourceBuffer
  436.  
  437. .Dupa:
  438.     move.l    d7,d0
  439.  
  440.  
  441. .lup:
  442.     addq.l    #4,a0
  443.     
  444.     dbra    d0,.ski            ; BUG!
  445.     movem.l    (sp)+,d0-a6
  446.     bra.w    .cant
  447. .ski
  448.  
  449.     cmp.l    #$000003ea,(a0)        ; look for DataHunk
  450.     beq.b    .okiej
  451.  
  452.     cmp.l    #$000003e9,(a0)        ; look for CodeHunk
  453.     beq.b    .okiej
  454.  
  455.     cmp.l    #$c00003e9,(a0)        ; look for Link-95 Hunk
  456.     bne.b    .lup
  457.  
  458. .okiej
  459.     addq.l    #4,a0
  460.  
  461.     move.l    a0,a5            ; begin of codehunk
  462.  
  463.  
  464.     ;****** CORRECT HUNKLENGTHs...
  465.  
  466.     move.l    0(a6),a0        ; xfdbi_SourceBuffer
  467.     lea.l    $14(a0),a0
  468.     sub.l    #SMG_size2/4,(a0)
  469.     sub.l    #SMG_size2/4,(a5)
  470.  
  471.     ;****** REPLACE STOLEN INSTRUCTION...
  472.  
  473.     move.l    #$61000002,d1
  474.  
  475.     move.l    a5,a0
  476.     add.l    (a5),a0
  477.     add.l    (a5),a0
  478.     add.l    (a5),a0
  479.     add.l    (a5),a0
  480.  
  481.     move.l    a5,a2            ; BeginOfCodeHunk
  482.  
  483. .restore
  484.     move.l    (a0),d2
  485.     cmp.l    d1,d2
  486.     bne    .none
  487.     
  488.     move.l    #$2c780004,(a0)        ; restore MOVE.L 4.W,A6
  489.  
  490. .none
  491.     addq.l    #2,d1
  492.     subq.l    #2,a0
  493.     cmpa.l    a0,a2
  494.     bne    .restore
  495.  
  496.     ;****** MAKE CLEAN COPY...
  497.  
  498.  
  499.     move.l    4(a6),a2        ; xfdbi_SourceBufLen
  500.     sub.l    #SMG_size2,a2
  501.     add.l    0(a6),a2        ; xfdbi_SourceBuffer
  502.  
  503.     move.l    a5,a0            ; before
  504.     move.l    (a5),d0
  505.     lsl.l    #2,d0
  506.     add.l    d0,a0
  507.     lea.l    SMG_size2(a0),a1    ; after
  508.     addq.l    #4,a1
  509.     addq.l    #4,a0
  510.  
  511. .copy:
  512.     move.l    (a1)+,(a0)+
  513.     cmp.l    a0,a2
  514.     bge.b    .copy
  515.  
  516.     movem.l    (sp)+,d0-a6
  517.  
  518.  
  519.     move.l    4(a0),d0    ; xfdbi_SourceBufLen
  520.     sub.l    #SMG_size2,d0
  521.     move.l    d0,32(a0)    ; xfdbi_TargetBufSaveLen
  522.  
  523.     move.l    60(a0),a1    ; xfdbi_UserTargetBuf
  524.  
  525.     btst.b    #3,49(a0)    ; XFDFB_USERTARGET,1+xfdbi_Flags
  526.     bne.b    .CopyMem
  527.  
  528.     move.w    #1,18(a0)    ; XFDERR_NOMEMORY,xfdbi_Error
  529.  
  530.     move.l    d0,28(a0)    ; xfdbi_TargetBufLen
  531.  
  532.     move.l    4.w,a6        ; execbase
  533.     
  534.     move.l    24(a0),d1    ; xfdbi_TargetBufMemType
  535.     
  536.     move.l    a0,-(sp)
  537.     jsr    -198(a6)    ; AllocMem
  538.     move.l    (sp)+,a0
  539.  
  540.     move.l    d0,a1
  541.     move.l    d0,20(a0)    ; xfdbi_TargetBuffer
  542.     beq.b    .Cant
  543.  
  544. .CopyMem:
  545.     clr.w    18(a0)        ; xfdbi_Error
  546.     
  547.     move.l    32(a0),d0    ; xfdbi_TargetBufSaveLen
  548.     move.l    0(a0),a0    ; xfdbi_SourceBuffer
  549.     jsr    -624(a6)    ; CopyMem
  550.  
  551.     moveq    #1,d0
  552.     movem.l    (sp)+,d2-d7/a0-a6
  553.     rts
  554. .cant:
  555.     movem.l    (sp)+,d2-d7/a0-a6
  556.     rts
  557.  
  558.  
  559.  
  560. ;--------------------------------------------------------------------
  561. ;--------------------------------------------------------------------
  562.  
  563. RemSMG:
  564.     movem.l    d2-d7/a0-a6,-(sp)
  565.  
  566.     moveq    #0,d0
  567.  
  568.     move.l    4(a0),d7        ; xfdbi_SourceBufLen
  569.  
  570.  
  571.     movem.l    d0-a6,-(sp)
  572.     move.l    a0,a6
  573.     move.l    0(a0),a0        ; xfdbi_SourceBuffer
  574.  
  575.  
  576. .Dupa:
  577.     move.l    d7,d0
  578.  
  579.  
  580. .lup:
  581.     addq.l    #4,a0
  582.     
  583.     dbra    d0,.ski            ; BUG!
  584.     movem.l    (sp)+,d0-a6
  585.     bra.w    .cant
  586. .ski
  587.  
  588.     cmp.l    #$000003ea,(a0)        ; look for DataHunk
  589.     beq.b    .okiej
  590.  
  591.     cmp.l    #$000003e9,(a0)        ; look for CodeHunk
  592.     beq.b    .okiej
  593.  
  594.     cmp.l    #$c00003e9,(a0)        ; look for Link-95 Hunk
  595.     bne.b    .lup
  596.  
  597. .okiej
  598.     addq.l    #4,a0
  599.  
  600.     move.l    a0,a5            ; begin of codehunk
  601.  
  602.  
  603.     ;****** CORRECT HUNKLENGTHs...
  604.  
  605.     move.l    0(a6),a0        ; xfdbi_SourceBuffer
  606.     lea.l    $14(a0),a0
  607.     sub.l    #SMG_size/4,(a0)
  608.     sub.l    #SMG_size/4,(a5)
  609.  
  610.     ;****** REPLACE STOLEN INSTRUCTION...
  611.  
  612.     move.l    #$61000002,d1
  613.  
  614.     move.l    a5,a0
  615.     add.l    (a5),a0
  616.     add.l    (a5),a0
  617.     add.l    (a5),a0
  618.     add.l    (a5),a0
  619.  
  620.     move.l    a5,a2            ; BeginOfCodeHunk
  621.  
  622. .restore
  623.     move.l    (a0),d2
  624.     cmp.l    d1,d2
  625.     bne    .none
  626.     
  627.     move.l    #$2c780004,(a0)        ; restore MOVE.L 4.W,A6
  628.  
  629. .none
  630.     addq.l    #2,d1
  631.     subq.l    #2,a0
  632.     cmpa.l    a0,a2
  633.     bne    .restore
  634.  
  635.     ;****** MAKE CLEAN COPY...
  636.  
  637.  
  638.     move.l    4(a6),a2        ; xfdbi_SourceBufLen
  639.     sub.l    #SMG_size,a2
  640.     add.l    0(a6),a2        ; xfdbi_SourceBuffer
  641.  
  642.     move.l    a5,a0            ; before
  643.     move.l    (a5),d0
  644.     lsl.l    #2,d0
  645.     add.l    d0,a0
  646.     lea.l    SMG_size(a0),a1    ; after
  647.     addq.l    #4,a1
  648.     addq.l    #4,a0
  649.  
  650. .copy:
  651.     move.l    (a1)+,(a0)+
  652.     cmp.l    a0,a2
  653.     bge.b    .copy
  654.  
  655.     movem.l    (sp)+,d0-a6
  656.  
  657.  
  658.     move.l    4(a0),d0    ; xfdbi_SourceBufLen
  659.     sub.l    #SMG_size,d0
  660.     move.l    d0,32(a0)    ; xfdbi_TargetBufSaveLen
  661.  
  662.     move.l    60(a0),a1    ; xfdbi_UserTargetBuf
  663.  
  664.     btst.b    #3,49(a0)    ; XFDFB_USERTARGET,1+xfdbi_Flags
  665.     bne.b    .CopyMem
  666.  
  667.     move.w    #1,18(a0)    ; XFDERR_NOMEMORY,xfdbi_Error
  668.  
  669.     move.l    d0,28(a0)    ; xfdbi_TargetBufLen
  670.  
  671.     move.l    4.w,a6        ; execbase
  672.     
  673.     move.l    24(a0),d1    ; xfdbi_TargetBufMemType
  674.     
  675.     move.l    a0,-(sp)
  676.     jsr    -198(a6)    ; AllocMem
  677.     move.l    (sp)+,a0
  678.  
  679.     move.l    d0,a1
  680.     move.l    d0,20(a0)    ; xfdbi_TargetBuffer
  681.     beq.b    .Cant
  682.  
  683.  
  684. .CopyMem:
  685.     clr.w    18(a0)        ; xfdbi_Error
  686.     
  687.     move.l    32(a0),d0    ; xfdbi_TargetBufSaveLen
  688.     move.l    0(a0),a0    ; xfdbi_SourceBuffer
  689.     jsr    -624(a6)    ; CopyMem
  690.  
  691.  
  692.     moveq    #1,d0
  693.     movem.l    (sp)+,d2-d7/a0-a6
  694.     rts
  695.  
  696.  
  697. .cant:
  698.     movem.l    (sp)+,d2-d7/a0-a6
  699.     rts
  700.  
  701.  
  702.